package com.funsport.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.funsport.common.enums.EventStatus;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 活动实体
 *
 * @author Fun-Sport Team
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("events")
public class Event implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 活动ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 活动标题
     */
    private String title;

    /**
     * 活动描述
     */
    private String description;

    /**
     * 封面图片
     */
    private String coverImage;

    /**
     * 创建者ID
     */
    private Long creatorId;

    /**
     * 俱乐部ID
     */
    private Long clubId;

    /**
     * 运动类型ID
     */
    private Integer sportTypeId;

    /**
     * 技能要求
     */
    private String skillLevel;

    /**
     * 开始时间
     */
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    private LocalDateTime endTime;

    /**
     * 报名截止时间
     */
    private LocalDateTime registrationDeadline;

    /**
     * 场地ID
     */
    private Long venueId;

    /**
     * 地点名称
     */
    private String locationName;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 所在城市
     */
    private String city;

    /**
     * 纬度
     */
    private BigDecimal latitude;

    /**
     * 经度
     */
    private BigDecimal longitude;

    /**
     * 最大参与人数
     */
    private Integer maxParticipants;

    /**
     * 最小参与人数
     */
    private Integer minParticipants;

    /**
     * 当前参与人数
     */
    private Integer currentParticipants;

    /**
     * 费用类型：free-免费，paid-付费，aa-AA制
     */
    private String feeType;

    /**
     * 费用金额
     */
    private BigDecimal feeAmount;

    /**
     * 费用说明
     */
    private String feeDescription;

    /**
     * 活动状态
     */
    private EventStatus status;

    /**
     * 是否公开
     */
    private Boolean isPublic;

    /**
     * 报名是否需要审核
     */
    private Boolean needApproval;

    /**
     * 是否允许候补
     */
    private Boolean allowWaitlist;

    /**
     * 天气要求
     */
    private String weatherRequirement;

    /**
     * 是否室内活动
     */
    private Boolean isIndoor;

    /**
     * 浏览次数
     */
    private Integer viewCount;

    /**
     * 点赞数
     */
    private Integer likeCount;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    /**
     * 是否启用接龙功能
     */
    private Boolean enableSolitaire;

    /**
     * 接龙截止时间（活动开始前半小时）
     */
    private LocalDateTime solitaireCutoff;

    /**
     * 是否启用分组功能
     */
    private Boolean enableGrouping;

    /**
     * 分组数量
     */
    private Integer groupCount;

    /**
     * 是否已分组
     */
    private Boolean isGrouped;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;
}

